There are many ways to do high performance computing on a general purpose graphics processor unit (GPGPU), but they all require learning a new language, architecture, etc. Moreover, most state-of-art parallel programs have operational MPI codes, and redesigning and reprogramming these "legacy" codes for GPUs is an enormous undertaking. MPI2GPU is a project to create a framework for porting MPI programs to a graphic processor to address these challenges.

Originally, GPGPU programming required some knowledge about 3D graphics programming, the use of an API, like OpenGL, and learning a low level shading language to take advantage of the processing power of the GPU.  Later, new languages and frameworks were developed specifically for programming GPGPU.  The Brook language \cite{Buck:2004:BGS:1186562.1015800} was developed to take advantage of the streaming properties of GPUs.  More recently Nvidia developed CUDA to develop for their unified shader model.  These still require learning a new language and a new way to program.

Others have since developed frameworks for more traditional models of parallel programming.   OpenMP-to-GPU \cite{1504194} is a translator for OpenMP programs to CUDA code.   \cite{5429842} is a framework for writing message-based algorithms that can then be ported to one or more GPUs and/or CPUs.   cudaMPI is a library that allows MPI communication between different GPUs.  BSGP \cite{1360618} is Bulk Synchronous Parallel (BSP) model implementation that runs on CUDA GPUs.  In \cite{5161065} they decribe an method for mapping MPI ranks to Dekagon slots.  However, there is no framework for porting MPI programs directly to a single GPU.

